home *** CD-ROM | disk | FTP | other *** search
- // Copyright (C) 2001-2002 Raven Software
- //
-
- #include "g_local.h"
-
- /*
- ==============
- OtherTeam
- ==============
- */
- int OtherTeam(team_t team)
- {
- if (team==TEAM_RED)
- return TEAM_BLUE;
- else if (team==TEAM_BLUE)
- return TEAM_RED;
- return team;
- }
-
- /*
- ==============
- TeamName
- ==============
- */
- const char *TeamName(team_t team)
- {
- switch ( team )
- {
- case TEAM_RED:
- return "RED";
-
- case TEAM_BLUE:
- return "BLUE";
-
- case TEAM_FREE:
- return "FREE";
-
- case TEAM_SPECTATOR:
- return "SPECTATOR";
- }
-
- return "";
- }
-
- /*
- ==============
- OtherTeamName
- ==============
- */
- const char *OtherTeamName(team_t team)
- {
- if (team==TEAM_RED)
- return TeamName ( TEAM_BLUE );
- else if (team==TEAM_BLUE)
- return TeamName ( TEAM_BLUE );
-
- return TeamName ( team );
- }
-
- /*
- ==============
- TeamColorString
- ==============
- */
- const char *TeamColorString(team_t team)
- {
- if (team==TEAM_RED)
- return S_COLOR_RED;
- else if (team==TEAM_BLUE)
- return S_COLOR_BLUE;
- else if (team==TEAM_SPECTATOR)
- return S_COLOR_YELLOW;
-
- return S_COLOR_WHITE;
- }
-
- // NULL for everyone
- void QDECL PrintMsg( gentity_t *ent, const char *fmt, ... )
- {
- char msg[1024];
- va_list argptr;
- char *p;
-
- va_start (argptr,fmt);
- if (vsprintf (msg, fmt, argptr) > sizeof(msg))
- {
- Com_Error ( ERR_FATAL, "PrintMsg overrun" );
- }
- va_end (argptr);
-
- // double quotes are bad
- while ((p = strchr(msg, '"')) != NULL)
- {
- *p = '\'';
- }
-
- trap_SendServerCommand ( ( (ent == NULL) ? -1 : ent-g_entities ), va("print \"%s\"", msg ));
- }
-
- /*
- ==============
- G_AddTeamScore
-
- used for gametype > GT_TDM
- for gametype GT_TDM the level.teamScores is updated in AddScore in g_combat.c
- ==============
- */
- void G_AddTeamScore( team_t team, int score )
- {
- // Dont allow negative scores to affect the team score. The reason for this is
- // that negative scores come from the actions of one bad player and a single player
- // can cause a team to loose because he/she wants to just kill the rest of their team, or
- // continue to kill themselves.
- if ( score < 0 )
- {
- return;
- }
-
- level.teamScores[ team ] += score;
- }
-
- /*
- ==============
- OnSameTeam
- ==============
- */
- qboolean OnSameTeam( gentity_t *ent1, gentity_t *ent2 )
- {
- if ( !ent1->client || !ent2->client )
- {
- return qfalse;
- }
-
- if ( !level.gametypeData->teams )
- {
- return qfalse;
- }
-
- if ( ent1->client->sess.team == ent2->client->sess.team )
- {
- return qtrue;
- }
-
- return qfalse;
- }
-
- /*
- ===========
- Team_GetLocation
-
- Report a location for the player. Uses placed nearby target_location entities
- ============
- */
- gentity_t *Team_GetLocation(gentity_t *ent, qboolean pvs )
- {
- gentity_t *eloc, *best;
- float bestlen, len;
- vec3_t origin;
-
- best = NULL;
- bestlen = 3*8192.0*8192.0;
-
- VectorCopy( ent->r.currentOrigin, origin );
-
- for (eloc = level.locationHead; eloc; eloc = eloc->nextTrain)
- {
- len = ( origin[0] - eloc->r.currentOrigin[0] ) * ( origin[0] - eloc->r.currentOrigin[0] )
- + ( origin[1] - eloc->r.currentOrigin[1] ) * ( origin[1] - eloc->r.currentOrigin[1] )
- + ( origin[2] - eloc->r.currentOrigin[2] ) * ( origin[2] - eloc->r.currentOrigin[2] );
-
- if ( len > bestlen )
- {
- continue;
- }
-
- if ( pvs && !trap_InPVS( origin, eloc->r.currentOrigin ) )
- {
- continue;
- }
-
- bestlen = len;
- best = eloc;
- }
-
- return best;
- }
-
-
- /*
- ===========
- Team_GetLocationMsg
- ============
- */
- qboolean Team_GetLocationMsg ( gentity_t *ent, char *loc, int loclen )
- {
- gentity_t *best;
-
- best = Team_GetLocation( ent, qtrue );
- if ( !best )
- {
- best = Team_GetLocation( ent, qfalse );
- }
-
- if (!best)
- {
- return qfalse;
- }
-
- Com_sprintf(loc, loclen, "%s", best->message);
-
- return qtrue;
- }
-
-